<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <link rel="stylesheet" href="./lib/bootstrap-v4.6.0.css">
  <style>
    body {
      padding: 10px;
    }

    .thumb {
      display: block;
      width: 500px;
      height: 340px;
      background-color: #efefef;
      margin-top: 30px;
    }
  </style>
</head>

<body>
  <div class="container-fluid">
    <div class="row">
      <div class="col-sm-4">
        <div class="custom-file">
          <!-- 文件选择框 -->
          <input type="file" accept="image/png, image/jpeg, image/gif" class="custom-file-input" id="customFile">
          <label class="custom-file-label" for="customFile">Choose image</label>
        </div>
      </div>
      <div class="col-sm-4">
        <!-- 上传图片的按钮 -->
        <button class=" btn btn-primary" id="btnUpload">上传图片</button>
      </div>
    </div>
    <div class="row">
      <div class="col-sm-4">
        <!-- 上传的进度条 -->
        <div class="progress mt-3">
          <div class="progress-bar" role="progressbar" style="width: 0%;" aria-valuenow="25" aria-valuemin="0"
            aria-valuemax="100">0%</div>
        </div>
      </div>
    </div>
    <div class="row">
      <div class="col-sm-4">
        <figure class="figure">
          <!-- 缩略图 -->
          <img src="..." class="thumb figure-img img-fluid rounded" alt="已上传的图片">
          <figcaption class="figure-caption">已上传的图片</figcaption>
        </figure>
      </div>
    </div>
  </div>
  <script>
    // TODO：实现上传文件的功能

    // 1. 封装上传文件的方法
    function uploadImage(fd) {
      const xhr = new XMLHttpRequest()
      xhr.addEventListener('load', function () {
        const res = JSON.parse(xhr.response)
        // 判断是否上传成功
        if (res.status === 200) {
          // 为 img 标签的 src 属性赋值
          document.querySelector('.thumb').setAttribute('src', 'http://www.liulongbin.top:3006' + res.url)
        }
      })
      //监听文件上传的进度progress
      xhr.upload.addEventListener('progress', function (e) {
        if (e.lengthComputable) {
          //动态计算出上传的百分比
          const percent = Math.ceil(e.loaded / e.total * 100)
          //获取到进度DOM对象
          const progressbar = document.querySelector('.progress-bar')
          //设置内容



        }
      })

      xhr.open('POST', 'http://www.liulongbin.top:3006/api/upload/avatar')
      // 把 FormData 格式的请求体发送给服务器
      xhr.send(fd)
    }

    // 2. 为上传按钮绑定点击事件处理函数
    document.querySelector('#btnUpload').addEventListener('click', function () {
      // 2.1 获取到文件选择框的 DOM 对象
      const inputFile = document.querySelector('#customFile')
      // 2.2 获取到用户选择的文件列表（伪数组）
      const files = inputFile.files
      // 2.3 判断用户是否选择了待上传的文件
      if (files.length === 0) return alert('请选择要上传的图片！')

      // 2.4 创建 FormData 对象，并 append 头像的文件
      const fd = new FormData()
      fd.append('avatar', files[0])

      // 2.5 调用刚才封装的 uploadImage() 方法，实现文件的上传
      uploadImage(fd)
    })
  </script>
</body>

</html>